#include "BMPFont.hpp"
#include <common.hpp>
#include <Math/Vector4.hpp>
#include <Math/Array.hpp>
#include "Graphics.hpp"
#include "BMPFontData.hpp"
#include "OpenGLTools.hpp"
namespace zzz{
Array<2,zuchar> data;
void BMPFont::Draw(const string &msg)
{
  int msglen=msg.size();
  zuchar *charidx=new zuchar[msglen];
  for (int i=0; i<msglen; i++) charidx[i]=msg[i];
  Array<2,zuchar> img(Vector2ui(fontheight,fontwidth*msglen));
  zuchar *cur=img.Data();
  for (int i=0; i<fontheight; i++) for (int j=0; j<msglen; j++)
  {
    memcpy(cur,data.Data()+data.ToIndex(Vector2ui(i,charidx[j]*fontwidth)),fontwidth);
    cur+=fontwidth;
  }
  glDrawPixels(fontwidth*msglen,fontheight,GL_LUMINANCE,GL_UNSIGNED_BYTE,img.Data());
  CHECK_GL_ERROR()
  delete[] charidx;
}

void BMPFont::DrawFont()
{
  glDrawPixels(fontwidth*256,fontheight,GL_LUMINANCE,GL_UNSIGNED_BYTE,data.Data());
}

BMPFont::BMPFont()
{
  data.SetSize(Vector2ui(fontheight,256*fontwidth));
  memcpy(data.Data(),fontmap,fontwidth*fontheight*256);
}

Vector2i BMPFont::Size(const string &msg)
{
  return Vector2i(fontwidth*msg.size(),fontheight);
}

zuint BMPFont::FontHeight() const
{
  return fontheight;
}
zuint BMPFont::FontWidth() const
{
  return fontwidth;
}

}